//
//  main.m
//  04-集合2-DIctionary
//
//  Created by dllo on 16/7/7.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "AdressBook.h"
int main(int argc, const char * argv[]) {
    
    [@(10) description];
    
    // 1.字典
    // 存储健值对(key-value)的集合类型
    // 字典中存储数据没有顺序
    // 通过key值存储,查询 value
    // 1> 初始化
    //initWithObjectsAndKeys:value, key, value, key,...
    //字典中只能存放对象类型(NSObject的子类)
    // 如果出现汉字, 代码提示,可能失效.
    NSDictionary *dic = [[NSDictionary alloc]  initWithObjectsAndKeys:@"liuyang", @"name", @"male", @"sex", @"18", @"age", nil];
    // 2> 便利构造器
    NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"liuyang", @"name", @"male", @"sex", @"18", @"age", nil];
    // 3> 字面量 字符号串 @"" 数值对象类型NSNumber @() 数组 @[] 字典 @{key: value, key: value}
    NSDictionary *dic2 = @{@"name": @"liuyang",
                            @"sex": @"male",
                            @"age": @(18)
                           };
    // 4> 取值
    // <1> 通过key取value
    NSString *name = [dic objectForKey:@"name"];
    // <2> 获取所有的key
    NSArray *allKeys = dic.allKeys;
    // <3> 获取所有的啊value
    NSArray *allvalue = dic.allValues;
    // <4> count
    NSUInteger count = dic.count;
    // <5> 通过一个数组,渠道对应数组的value
    NSArray *allValueKeys = [dic objectsForKeys:dic.allKeys  notFoundMarker:[NSString class]];
    NSLog(@"%@", allValueKeys);
    // <6> 通过一个对象, 查找所有value是这个对象的所有key
    NSArray *array = [dic allKeysForObject:@"liuyang"];
    // <7> 语法糖取值 arr[下表] dictionary[key];
    NSLog(@"%@", dic[@"name"]);
    
    // 可变字典 NSMutableDictionary
    // 初始化方式 与 不可变字典基本相同
    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
    // 不推荐使用字面量
    NSMutableDictionary *mutableDic2 = [@{} mutableCopy];
    
    // 2.取值 与不可变字典相同
    // 3.增 删 改
    // 1> 添加 如果key存在,会将之前的value值替换掉
    // 如果key不存在,会直接添加
    // 注意:字典中key不要重复,如果重复,会以最后的value进行赋值
    [mutableDic setObject:@(18242365630) forKey:@"phoneNumebr"];
    // 2> 删除
    [mutableDic removeObjectForKey:@"phoneNumber"];
    [mutableDic removeAllObjects];
    [mutableDic removeObjectsForKeys:@[@"name", @"phoneNuamber"]];
    // 3> 语法糖 与setObject: forKey 方法相同
    mutableDic[@"name"] = @"yinjiaen";
    NSLog(@"%@", mutableDic);
    
    // 完成以下需求
    // 需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
    // 2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
    // 3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
    // 4、删除某个分组的全部联系人。
    Contact *firstContact = [Contact contactWithName:@"liuyang" sex:@"male" phoneNumber:@"18242365635" adress:@"jinzhoushi" age:23];
    [firstContact showContact];
    Contact *secondContact = [Contact contactWithName:@"shengli" sex:@"female" phoneNumber:@"18242365637" adress:@"huludaoshi" age:24];
    [secondContact showContact];
    Contact *thirdContact = [Contact contactWithName:@"xiening" sex:@"male" phoneNumber:@"18242365630" adress:@"shenyangshi" age:23];
    [thirdContact showContact];
    // 创建字典容器,存放联系人;
    NSMutableDictionary *contactDictionary = [NSMutableDictionary dictionary];
    AdressBook *adressBook = [[AdressBook alloc] initWithDictionary:contactDictionary];
    [adressBook addContact:firstContact];
    [adressBook addContact:secondContact];
    [adressBook addContact:thirdContact];
    NSLog(@"1:%@", adressBook.mutableDicOfContact);
    // key:A~Z value: NSMutableArray
    //添加联系人
    [adressBook removeGroupName:@"L"];
    NSLog(@"2:%@", adressBook.mutableDicOfContact);
    [adressBook removeContactOfName:@"shengli"];
    NSLog(@"3:%@", adressBook.mutableDicOfContact);
    // 2.集合
    // 不可变NSSet 和 可变NSMutableSet
    // 1> 初始化
    // 集合会自动删除掉重复的内容(互异性)
    // 要删除数组中重复的内容,放入集合;
    NSSet *set = [[NSSet alloc] initWithObjects:@"liuyang", @"liuyang", nil];
    NSLog(@"%@", set);
    // 2> 构造器
    NSSet *setObject = [NSSet setWithObjects:@"shengli", @"xiening", nil];
    // 3> 没有提供集合的字面量
    // 取值
    //从集合中取出任意元素
    NSString *string = [set anyObject];
    // count
    NSUInteger setCount = set.count;
    // 集合去重(删除掉数组中重复的元素)
    NSArray *arr = @[@10, @20, @30, @40, @10, @10];
    NSSet *setOfArr = [NSSet setWithArray:arr];
    arr = setOfArr.allObjects;
    NSLog(@"%@", arr);
    // 可变的集合 NSMutableSet
    // 1> 初始化与不可变集合相同
    // 2> 取值方法相同 anyObject
    // 3> 可变集合 可变性
    NSMutableSet *set1 = [NSMutableSet set];
    [set1 addObject:@"xiening"];
    [set1 removeObject:@"xiening"];
    [set1 removeAllObjects];
    return 0;
}
